package com.lzy.canal.component.consumer;

import com.alibaba.otter.canal.protocol.CanalEntry;
import com.lzy.canal.component.result.BaseConsumerResultData;
import com.lzy.canal.component.row.CanalRow;

import java.util.List;

public interface MysqlConsumer<T extends BaseConsumerResultData> {


    /**
     * mysql 一次订阅消息数据转换成es数据
     *
     * @param row 记录行集合
     * @return
     */
    List<T> consumer(CanalRow row);

    /**
     * 获取需要处理的数据
     *
     * @param row 行对象
     * @return
     */
    default CanalEntry.RowChange getRowChage(CanalRow row) {
        return row.getRowChange();
    }

    /**
     * 通过不同事情类型获取不同记录行
     *
     * @param rowData   行数据
     * @param eventType 事件类型
     * @return
     */
    default List<CanalEntry.Column> getColumn(CanalEntry.RowData rowData, CanalEntry.EventType eventType) {
        if (CanalEntry.EventType.DELETE.equals(eventType)) {
            return rowData.getBeforeColumnsList();
        }
        return rowData.getAfterColumnsList();
    }
}
